<?php

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 * Description of CustoDAO
 *
 * @author thales
 */
class CustoDAO {
    public $conn = null;
    
    public function __construct() {
        $this->conn = DB::getConn();
    }
    
    /**
     * Método responsável por inserir um novo custo.
     * 
     * @param CustosVO $objCusto
     * @return boolean
     */
    public function salvar(CustosVO $objCusto){
        $sql = 'insert into custo
                    (
                        valor,
                        data,
                        tipoCusto_id
                    )
                    values
                    (
                        ?--1,
                        ?--2,
                        ?--3
                    )';
        
        $stt = $this->conn->prepare($sql);
        $stt->bindValue(1, $objCusto->getValor(), PDO::PARAM_STR);
        $stt->bindValue(2, $objCusto->getData(), PDO::PARAM_STR);
        $stt->bindValue(3, $objCusto->getTipoCustoId(), PDO::PARAM_INT);
        
        if ( !$stt->execute() ){
            throw new Exception('Não foi possível salvar o custo!<br>' . var_dump($stt->errorInfo()) );
        } 
        
        LogDAO::getInstance()->salvar(__METHOD__, $this->conn->lastInsertId(), __CLASS__);
        return true;
        
    }
    
    /**
     * Método responsávelpor alterar os dados do custo
     * 
     * @param CustosVO $objCusto
     */
    public function alterar(CustosVO $objCusto){
        $sql = '';
        
        $stt = $this->conn->prepare($sql);
        
        if ( !$stt->execute() ){
            throw new Exception('Não foi possível salvar o cliente!<br>' . var_dump($stt->errorInfo()) );
        } 
        
        LogDAO::getInstance()->salvar(__METHOD__, $objCustoVO->getId(), __CLASS__);
        return true;
        
    }
    
    /**
     * Método responsável por buscar todos os dados do usuário.<br>
     * 
     * @param UsuarioBO $objUsuarioBO
     
    */
    public function pesquisar(CustosVO $objCusto){
        $sql = 'select * from custo where id - ? ';
                
        
        $stt = $this->conn->prepare($sql);  
        $stt->bindValue(1, $objCusto->getTipoCusto()->getId(),PDO::PARAM_STR);
      
        if ( !$stt->execute() ){
            throw new Exception('Não foi possível pesquisar os dados do cliente!' . __METHOD__ );
        } 
       
        
        $tmp = $stt->fetch(PDO::FETCH_ASSOC);
            
        $objCusto->setId($tmp['id']);
        $objCusto->setValor($tmp['valor']); 
        $objCusto->setData($tmp['data']);
        $objCusto->setTipoCustoId($tmp['tipoCusto_id']);
     
        return $objCusto;
    }
    
    
    
    /**
     * Método responsável por pegar os dados do custo.<br>
     * 
     * @param CustoVO $objCustoVO
     */
    public function pesquisarDados( CustoBO $objCustoBO){
        $sql = 'select 
                    a.id as idCusto,
                    a.valor,
                    a.data,
                    a.tipoCusto_id,
                    b.id as idTipoCusto,
                    d.descricao
                from 
                    custo a
                inner join
                    tipoCusto b on a.tipoCusto_id = b.id
                where descricao = ?' ;
        if ( $objCustoBO->getTipoCusto()->getDescricao() != '' ) {
            $sql .= 'id = ?';
        }
        
        
        $stt = $this->conn->prepare($sql);  
        $stt->bindValue(1, $objCustoBO->getTipoCusto()->getDescricao(), PDO::PARAM_STR);

        if ( !$stt->execute() ){
            throw new Exception('Não foi possível pegar os dados do custo!' . __METHOD__ );
        } 
        
        $listaCustoBO = array();
        while($tmp = $stt->fetch(PDO::FETCH_ASSOC)){
             $objCustoBO->getCusto()->setId($tmp['idCusto']);
             $objCustoBO->getCusto()->getValor('valor');
             $objCustoBO->getCusto()->getData('data');
             $objCustoBO->getCusto()->getTipoCustoId('tipoCusto_id');
             $objCustoBO->getTipoCusto()->setId('idTipoCusto');
             $objCustoBO->getTipoCusto()->setTipoDescricao('descricao');
             
             $listaCustoBO[] = $objCustoBO;
        }
            
        return $listaCustoBO;   
    }
    
    /**
     * Método para excluir um custo do sistema.
     * 
     * @param CustoVO $objCustoVO
     * @return boolean 
     */
    public function excluir(CustosVO $objCustoVO ){
        $sql = 'delete from custo where id = ?';
        
        $stt = $this->conn->prepare($sql);
        $stt->bindValue(1, $objCustoVO->getId(), PDO::PARAM_INT);
        
        if ( !$stt->execute() ){
            throw new Exception('Não foi possível excluir o custo!<br>' . var_dump($stt->errorInfo()) );
        } 
        
        LogDAO::getInstance()->salvar(__METHOD__, $objCustoVO->getId(), __CLASS__);
        
        return true;
    }
}

?>
